package com.zjst.tree;

/**
 * @author ZhanBo
 * @date 2020/5/25
 */
public class ArrayBinaryTreeDemo {

    public static void main(String[] args) {
        int [] array = {1,2,3,4,5,6,7};
        ArrayBinaryTree tree= new ArrayBinaryTree(array);
        //前序 1	2	4	5	3	6	7
        //tree.preOrderTraversal(0)
        //中序 4	2	5	1	6	3	7
        //tree.inOrderTraversal(0)
        //后序 4	5	2	6	7	3	1
        tree.postOrderTraversal(0);
    }

}


/**
 * 数组存储二叉树（完全二叉树）
 */
class ArrayBinaryTree{
    private int[] array;

    ArrayBinaryTree(int [] array){
        this.array = array;
    }

    /**
     *前序遍历
     * @param index
     */
    public void preOrderTraversal(int index){
       if (array == null || array.length ==0){
           System.out.println("数组为空，不能按照二叉树的前序遍历");
       }
       //输出当前元素
        System.out.print(array[index]+"\t");
       //左递归
       if ((index * 2 +1) < array.length){
           preOrderTraversal(index * 2 +1);
       }
        //右递归
        if ((index * 2 +2) < array.length){
            preOrderTraversal(index * 2 +2);
        }
    }

    /**
     * 中序遍历
     * @param index
     */
    public void inOrderTraversal(int index){
        if (array == null || array.length ==0){
            System.out.println("数组为空，不能按照二叉树的前序遍历");
        }
        //左递归
        if ((index * 2 +1) < array.length){
            inOrderTraversal(index * 2 +1);
        }
        //输出当前元素
        System.out.print(array[index]+"\t");
        //右递归
        if ((index * 2 +2) < array.length){
            inOrderTraversal(index * 2 +2);
        }
    }

    /**
     * 后序遍历
     * @param index
     */
    public void postOrderTraversal(int index){
        if (array == null || array.length ==0){
            System.out.println("数组为空，不能按照二叉树的前序遍历");
        }
        //左递归
        if ((index * 2 +1) < array.length){
            postOrderTraversal(index * 2 +1);
        }
        //右递归
        if ((index * 2 +2) < array.length){
            postOrderTraversal(index * 2 +2);
        }
        //输出当前元素
        System.out.print(array[index]+"\t");
    }

}
